home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Programming / fpc / amigaunits / expansion.pas < prev    next >
Pascal/Delphi Source File  |  1998-09-22  |  7KB  |  319 lines

  1. {
  2.     This file is part of the Free Pascal run time library.
  3.  
  4.     A file in Amiga system run time library.
  5.     Copyright (c) 1998 by Nils Sjoholm
  6.     member of the Amiga RTL development team.
  7.  
  8.     See the file COPYING.FPC, included in this distribution,
  9.     for details about the copyright.
  10.  
  11.     This program is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14.  
  15.  **********************************************************************}
  16.  
  17. UNIT expansion;
  18.  
  19. INTERFACE
  20. USES exec, configvars, amigados;
  21.  
  22. Const
  23.     EXPANSIONNAME       : PChar = 'expansion.library';
  24.  
  25. { flags for the AddDosNode() call }
  26.     ADNB_STARTPROC      = 0;
  27.  
  28.     ADNF_STARTPROC      = 1;
  29.  
  30. VAR ExpansionBase : pLibrary;
  31.  
  32. FUNCTION AddBootNode(bootPri : LONGINT; flags : ULONG; deviceNode : pDeviceNode; configDev : pConfigDev) : BOOLEAN;
  33. PROCEDURE AddConfigDev(configDev : pConfigDev);
  34. FUNCTION AddDosNode(bootPri : LONGINT; flags : ULONG; deviceNode : pDeviceNode) : BOOLEAN;
  35. PROCEDURE AllocBoardMem(slotSpec : ULONG);
  36. FUNCTION AllocConfigDev : pConfigDev;
  37. FUNCTION AllocExpansionMem(numSlots : ULONG; slotAlign : ULONG) : POINTER;
  38. PROCEDURE ConfigBoard(board : POINTER; configDev : pConfigDev);
  39. PROCEDURE ConfigChain(baseAddr : POINTER);
  40. FUNCTION FindConfigDev(oldConfigDev : pConfigDev; manufacturer : LONGINT; product : LONGINT) : pConfigDev;
  41. PROCEDURE FreeBoardMem(startSlot : ULONG; slotSpec : ULONG);
  42. PROCEDURE FreeConfigDev(configDev : pConfigDev);
  43. PROCEDURE FreeExpansionMem(startSlot : ULONG; numSlots : ULONG);
  44. FUNCTION GetCurrentBinding(currentBinding : pCurrentBinding; bindingSize : ULONG) : ULONG;
  45. FUNCTION MakeDosNode(parmPacket : POINTER) : pDeviceNode;
  46. PROCEDURE ObtainConfigBinding;
  47. FUNCTION ReadExpansionByte(board : POINTER; offset : ULONG) : BYTE;
  48. PROCEDURE ReadExpansionRom(board : POINTER; configDev : pConfigDev);
  49. PROCEDURE ReleaseConfigBinding;
  50. PROCEDURE RemConfigDev(configDev : pConfigDev);
  51. PROCEDURE SetCurrentBinding(currentBinding : pCurrentBinding; bindingSize : ULONG);
  52. PROCEDURE WriteExpansionByte(board : POINTER; offset : ULONG; byte : ULONG);
  53.  
  54. IMPLEMENTATION
  55.  
  56. FUNCTION AddBootNode(bootPri : LONGINT; flags : ULONG; deviceNode : pDeviceNode; configDev : pConfigDev) : BOOLEAN;
  57. BEGIN
  58.   ASM
  59.     MOVE.L  A6,-(A7)
  60.     MOVE.L  bootPri,D0
  61.     MOVE.L  flags,D1
  62.     MOVEA.L deviceNode,A0
  63.     MOVEA.L configDev,A1
  64.     MOVEA.L ExpansionBase,A6
  65.     JSR -036(A6)
  66.     MOVEA.L (A7)+,A6
  67.     TST.W   D0
  68.     BEQ.B   @end
  69.     MOVEQ   #1,D0
  70.   @end: MOVE.B  D0,@RESULT
  71.   END;
  72. END;
  73.  
  74. PROCEDURE AddConfigDev(configDev : pConfigDev);
  75. BEGIN
  76.   ASM
  77.     MOVE.L  A6,-(A7)
  78.     MOVEA.L configDev,A0
  79.     MOVEA.L ExpansionBase,A6
  80.     JSR -030(A6)
  81.     MOVEA.L (A7)+,A6
  82.   END;
  83. END;
  84.  
  85. FUNCTION AddDosNode(bootPri : LONGINT; flags : ULONG; deviceNode : pDeviceNode) : BOOLEAN;
  86. BEGIN
  87.   ASM
  88.     MOVE.L  A6,-(A7)
  89.     MOVE.L  bootPri,D0
  90.     MOVE.L  flags,D1
  91.     MOVEA.L deviceNode,A0
  92.     MOVEA.L ExpansionBase,A6
  93.     JSR -150(A6)
  94.     MOVEA.L (A7)+,A6
  95.     TST.W   D0
  96.     BEQ.B   @end
  97.     MOVEQ   #1,D0
  98.   @end: MOVE.B  D0,@RESULT
  99.   END;
  100. END;
  101.  
  102. PROCEDURE AllocBoardMem(slotSpec : ULONG);
  103. BEGIN
  104.   ASM
  105.     MOVE.L  A6,-(A7)
  106.     MOVE.L  slotSpec,D0
  107.     MOVEA.L ExpansionBase,A6
  108.     JSR -042(A6)
  109.     MOVEA.L (A7)+,A6
  110.   END;
  111. END;
  112.  
  113. FUNCTION AllocConfigDev : pConfigDev;
  114. BEGIN
  115.   ASM
  116.     MOVE.L  A6,-(A7)
  117.     MOVEA.L ExpansionBase,A6
  118.     JSR -048(A6)
  119.     MOVEA.L (A7)+,A6
  120.     MOVE.L  D0,@RESULT
  121.   END;
  122. END;
  123.  
  124. FUNCTION AllocExpansionMem(numSlots : ULONG; slotAlign : ULONG) : POINTER;
  125. BEGIN
  126.   ASM
  127.     MOVE.L  A6,-(A7)
  128.     MOVE.L  numSlots,D0
  129.     MOVE.L  slotAlign,D1
  130.     MOVEA.L ExpansionBase,A6
  131.     JSR -054(A6)
  132.     MOVEA.L (A7)+,A6
  133.     MOVE.L  D0,@RESULT
  134.   END;
  135. END;
  136.  
  137. PROCEDURE ConfigBoard(board : POINTER; configDev : pConfigDev);
  138. BEGIN
  139.   ASM
  140.     MOVE.L  A6,-(A7)
  141.     MOVEA.L board,A0
  142.     MOVEA.L configDev,A1
  143.     MOVEA.L ExpansionBase,A6
  144.     JSR -060(A6)
  145.     MOVEA.L (A7)+,A6
  146.   END;
  147. END;
  148.  
  149. PROCEDURE ConfigChain(baseAddr : POINTER);
  150. BEGIN
  151.   ASM
  152.     MOVE.L  A6,-(A7)
  153.     MOVEA.L baseAddr,A0
  154.     MOVEA.L ExpansionBase,A6
  155.     JSR -066(A6)
  156.     MOVEA.L (A7)+,A6
  157.   END;
  158. END;
  159.  
  160. FUNCTION FindConfigDev(oldConfigDev : pConfigDev; manufacturer : LONGINT; product : LONGINT) : pConfigDev;
  161. BEGIN
  162.   ASM
  163.     MOVE.L  A6,-(A7)
  164.     MOVEA.L oldConfigDev,A0
  165.     MOVE.L  manufacturer,D0
  166.     MOVE.L  product,D1
  167.     MOVEA.L ExpansionBase,A6
  168.     JSR -072(A6)
  169.     MOVEA.L (A7)+,A6
  170.     MOVE.L  D0,@RESULT
  171.   END;
  172. END;
  173.  
  174. PROCEDURE FreeBoardMem(startSlot : ULONG; slotSpec : ULONG);
  175. BEGIN
  176.   ASM
  177.     MOVE.L  A6,-(A7)
  178.     MOVE.L  startSlot,D0
  179.     MOVE.L  slotSpec,D1
  180.     MOVEA.L ExpansionBase,A6
  181.     JSR -078(A6)
  182.     MOVEA.L (A7)+,A6
  183.   END;
  184. END;
  185.  
  186. PROCEDURE FreeConfigDev(configDev : pConfigDev);
  187. BEGIN
  188.   ASM
  189.     MOVE.L  A6,-(A7)
  190.     MOVEA.L configDev,A0
  191.     MOVEA.L ExpansionBase,A6
  192.     JSR -084(A6)
  193.     MOVEA.L (A7)+,A6
  194.   END;
  195. END;
  196.  
  197. PROCEDURE FreeExpansionMem(startSlot : ULONG; numSlots : ULONG);
  198. BEGIN
  199.   ASM
  200.     MOVE.L  A6,-(A7)
  201.     MOVE.L  startSlot,D0
  202.     MOVE.L  numSlots,D1
  203.     MOVEA.L ExpansionBase,A6
  204.     JSR -090(A6)
  205.     MOVEA.L (A7)+,A6
  206.   END;
  207. END;
  208.  
  209. FUNCTION GetCurrentBinding(currentBinding : pCurrentBinding; bindingSize : ULONG) : ULONG;
  210. BEGIN
  211.   ASM
  212.     MOVE.L  A6,-(A7)
  213.     MOVEA.L currentBinding,A0
  214.     MOVE.L  bindingSize,D0
  215.     MOVEA.L ExpansionBase,A6
  216.     JSR -138(A6)
  217.     MOVEA.L (A7)+,A6
  218.     MOVE.L  D0,@RESULT
  219.   END;
  220. END;
  221.  
  222. FUNCTION MakeDosNode(parmPacket : POINTER) : pDeviceNode;
  223. BEGIN
  224.   ASM
  225.     MOVE.L  A6,-(A7)
  226.     MOVEA.L parmPacket,A0
  227.     MOVEA.L ExpansionBase,A6
  228.     JSR -144(A6)
  229.     MOVEA.L (A7)+,A6
  230.     MOVE.L  D0,@RESULT
  231.   END;
  232. END;
  233.  
  234. PROCEDURE ObtainConfigBinding;
  235. BEGIN
  236.   ASM
  237.     MOVE.L  A6,-(A7)
  238.     MOVEA.L ExpansionBase,A6
  239.     JSR -120(A6)
  240.     MOVEA.L (A7)+,A6
  241.   END;
  242. END;
  243.  
  244. FUNCTION ReadExpansionByte(board : POINTER; offset : ULONG) : BYTE;
  245. BEGIN
  246.   ASM
  247.     MOVE.L  A6,-(A7)
  248.     MOVEA.L board,A0
  249.     MOVE.L  offset,D0
  250.     MOVEA.L ExpansionBase,A6
  251.     JSR -096(A6)
  252.     MOVEA.L (A7)+,A6
  253.     MOVE.L  D0,@RESULT
  254.   END;
  255. END;
  256.  
  257. PROCEDURE ReadExpansionRom(board : POINTER; configDev : pConfigDev);
  258. BEGIN
  259.   ASM
  260.     MOVE.L  A6,-(A7)
  261.     MOVEA.L board,A0
  262.     MOVEA.L configDev,A1
  263.     MOVEA.L ExpansionBase,A6
  264.     JSR -102(A6)
  265.     MOVEA.L (A7)+,A6
  266.   END;
  267. END;
  268.  
  269. PROCEDURE ReleaseConfigBinding;
  270. BEGIN
  271.   ASM
  272.     MOVE.L  A6,-(A7)
  273.     MOVEA.L ExpansionBase,A6
  274.     JSR -126(A6)
  275.     MOVEA.L (A7)+,A6
  276.   END;
  277. END;
  278.  
  279. PROCEDURE RemConfigDev(configDev : pConfigDev);
  280. BEGIN
  281.   ASM
  282.     MOVE.L  A6,-(A7)
  283.     MOVEA.L configDev,A0
  284.     MOVEA.L ExpansionBase,A6
  285.     JSR -108(A6)
  286.     MOVEA.L (A7)+,A6
  287.   END;
  288. END;
  289.  
  290. PROCEDURE SetCurrentBinding(currentBinding : pCurrentBinding; bindingSize : ULONG);
  291. BEGIN
  292.   ASM
  293.     MOVE.L  A6,-(A7)
  294.     MOVEA.L currentBinding,A0
  295.     MOVE.L  bindingSize,D0
  296.     MOVEA.L ExpansionBase,A6
  297.     JSR -132(A6)
  298.     MOVEA.L (A7)+,A6
  299.   END;
  300. END;
  301.  
  302. PROCEDURE WriteExpansionByte(board : POINTER; offset : ULONG; byte : ULONG);
  303. BEGIN
  304.   ASM
  305.     MOVE.L  A6,-(A7)
  306.     MOVEA.L board,A0
  307.     MOVE.L  offset,D0
  308.     MOVE.L  byte,D1
  309.     MOVEA.L ExpansionBase,A6
  310.     JSR -114(A6)
  311.     MOVEA.L (A7)+,A6
  312.   END;
  313. END;
  314.  
  315. END. (* UNIT EXPANSION *)
  316.  
  317.  
  318.  
  319.